#ifndef TestPKBRelationship_h
#define TestPKBRelationship_h

#include <vector>
#include <cppunit/extensions/HelperMacros.h>
#include "DesignExtractor.h"
#include "PKB.h"
#include "Type.h"

class PKBRelationshipTest : public CPPUNIT_NS::TestFixture 
{
	PKB* pkb;

	CPPUNIT_TEST_SUITE( PKBRelationshipTest );

	CPPUNIT_TEST( testProc );
	CPPUNIT_TEST( testVar );
	CPPUNIT_TEST( testConstant );
	CPPUNIT_TEST( testEntity );

	CPPUNIT_TEST( testUses );
	CPPUNIT_TEST( testModifies );
	CPPUNIT_TEST( testCalls );
	CPPUNIT_TEST( testParent );
	CPPUNIT_TEST( testFollows );
	CPPUNIT_TEST( testAffects );

	//QW's part
	CPPUNIT_TEST( testGetChildStar );
	CPPUNIT_TEST( testSetGetCallRelation );
	CPPUNIT_TEST( testGetCalledByStar );
	CPPUNIT_TEST( testGetCalledByLineStar );
	CPPUNIT_TEST( testGetCallerOfStar );
	CPPUNIT_TEST( testGetCallerLineOfStar );
	CPPUNIT_TEST( testIstCallsStar );

	CPPUNIT_TEST( testSetGetNextRelation );
	CPPUNIT_TEST( testGetSuccessorNextStar );
	CPPUNIT_TEST( testGetPredecessorNextStar );
	//End QW's part

	CPPUNIT_TEST_SUITE_END();
private:
	void testInsertProc();
	void testGetProc();
	void testSetProcStartEnd();
	void testGetProcStartEnd();
	void testInsertVar();
	void testGetVar();
	void testInsertConstant();
	void testGetConstant();

	void testInsertLineEntity();
	void testGetLineEntity();
	void testSetUses();
	void testGetUses();
	void testSetModifies();
	void testGetModifes();
	void testGetAffects();
	void testSetLastOfContainer();

	void testSetParent();
	void testGetParent();
	void testSetFollow();
	void testGetFollow();
	void testSetCall();
	void testGetCall();
public:
	void setUp();
	void tearDown();

	void testProc();
	void testVar();
	void testConstant();
	void testEntity();

	void testUses();
	void testModifies();
	void testCalls();
	void testParent();
	void testFollows();
	void testAffects();

	//QW's part
	void testGetChildStar();

	//for Call
	void testSetGetCallRelation();
	void testGetCalledByStar();
	void testGetCalledByLineStar();
	void testGetCallerOfStar();
	void testGetCallerLineOfStar();
	void testIstCallsStar();

	//for Next
	void testSetGetNextRelation();
	void testGetSuccessorNextStar();
	void testGetPredecessorNextStar();
	//End of QW's part
};
#endif